package com.itheima.arithmetic.queue;

/**
 * 数组方式实现队列
 */
public class ArrayQueue {

    // 数据
    private int data[];

    // 头(下标索引指针)
    private int head = 0;

    // 尾(下标索引指针)
    private int tail = 0;

    // 数组大小
    private int size = 0;

    // 申请空间
    public ArrayQueue(int capacity){
        data = new int[capacity];
        size = capacity;
    }

    // 入队(单向顺序队列一般从尾部插入)
    private void push(int m) {
        // 队列是否满了?
        if (!judge()) {
            // 尾部插入数据
            data[tail] = m;

            // 尾部向后移动一位
            tail++;

            size++;
        }
    }

    // 出队(单向顺序队列一般从头出队)
    private int pop(){

        // 判断是否为空
        if (isEmpty()) {
            return -1;
        }

        // 取出第一个数据
        int headData = data[head];

        // 头指针后移
        head++;

        size--;
        return headData;
    }


    private boolean isEmpty() {

        //1. push的时候tail++了, 出队时指针后移
        if (head == tail) {
            return true;
        }
        return false;

        //2. return size == 0;
    }


    /**
     * 是否满了
     * true: 已满
     */
    private boolean judge(){
        if (tail == size) {
            return true;
        }
        return false;
    }
}
